Adjust the database collation as well as charset.

Akinori MUSHA лет %!s(int64=9): %!d(string=назад)
Родитель
Сommit
457b301a1b
1 измененных файлов с 8 добавлено и 6 удалено
  1. 8 6
      lib/ar_mysql_column_charset.rb

+ 8 - 6
lib/ar_mysql_column_charset.rb

@@ -29,9 +29,8 @@ module ActiveRecord::ConnectionAdapters
29 29
     module CharsetSupport
30 30
       def prepare_column_options(column, types)
31 31
         spec = super
32
-        conn = ActiveRecord::Base.connection
33
-        spec[:charset]   = column.charset.inspect if column.charset && column.charset != conn.charset
34
-        spec[:collation] = column.collation.inspect if column.collation && column.collation != conn.collation
32
+        spec[:charset]   = column.charset.inspect if column.charset && column.charset != charset
33
+        spec[:collation] = column.collation.inspect if column.collation && column.collation != collation
35 34
         spec
36 35
       end
37 36
 
@@ -67,9 +66,12 @@ module ActiveRecord::ConnectionAdapters
67 66
       def create_database(name, options = {})
68 67
         # utf8mb4 is used in column definitions; use utf8 for
69 68
         # databases.
70
-        if options[:charset] == 'utf8mb4'
71
-          options = options.merge(charset: 'utf8')
72
-        end
69
+        [:charset, :collation].each { |key|
70
+          case options[key]
71
+          when /\A(utf8mb4(_\w*)?)\z/
72
+            options = options.merge(key => "utf8#{$2}")
73
+          end
74
+        }
73 75
         super(name, options)
74 76
       end
75 77
     end